/*
 * Copyright 2006-2022 ahtelit.com, All Rights Reserved.
 */

package com.telit.firecommand.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.telit.common.entity.PageData;
import com.telit.firecommand.entity.SysUser;
import com.telit.firecommand.model.sysUser.UpdateUserRequest;
import com.telit.firecommand.vo.ForesterVO;
import com.telit.firecommand.vo.MicroSysUserVO;
import com.telit.upms.dto.SysUserOperationStatusDto;

import java.util.List;


/**
 * SysUserService
 *
 * @author yuezhuang
 * @since 2023-01-17
 */
public interface SysUserService extends IService<SysUser> {

    /**
     * 监听处理用户信息
     *
     * @param dto 用户信息
     */
    void dealSysUser(SysUserOperationStatusDto dto);

    /**
     * 更新用户信息
     *
     * @param updateUserRequest 请求参数
     *
     * @return MicroSysUserVO
     */
    MicroSysUserVO update(UpdateUserRequest updateUserRequest);

    /**
     * 查询人员列表
     *
     * @param onlineStatus  在线状态 0-离线 1-在线
     * @param name          护林员名称
     * @param regionCode    个人所属行政区划编码
     * @param areaRecursion 是否包含子行政区划数据
     * @param roleCodes     角色集合
     * @param ids           id集合
     * @param current       当前页数
     * @param size          每页条数
     *
     * @return ForesterVO
     */
    PageData<List<ForesterVO>> qryList(Integer onlineStatus, String name, String regionCode, boolean areaRecursion,
                                       String roleCodes, String ids, Integer current, Integer size);

    /**
     * 查询用户详情
     *
     * @param id id
     *
     * @return ForesterVO
     */
    ForesterVO qryDetail(Long id);

    /**
     * 查询id集合
     *
     * @param onlineStatus  在线状态 0-离线 1-在线
     * @param name          护林员名称
     * @param regionCode    个人所属行政区划编码
     * @param areaRecursion 是否包含子行政区划数据
     * @param roleCodes     角色集合
     *
     * @return List<String>
     */
    List<Long> qryIdList(Integer onlineStatus, String name, String regionCode, boolean areaRecursion,
                         String roleCodes);

    /**
     * 处理用户在离线
     */
    void dealUserOnline();

}
